package code;

import java.util.HashMap;
import java.util.Map;

public class AddTwoNumbers {
	public static class ListNode {
		     int val;
		     ListNode next;
		     ListNode(int x) {
		     val = x;
		     next = null;
		     }
		  }
	 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		 if(l1==null)	return l2;
		 if(l2==null)	return l1;
		 
		 ListNode p,q,ans,pre=l1;
		 p=l1;
		 q=l2;
		 ans=l1;
		 int flag=0;
		 while(p!=null && q!=null){
			 pre=p;
			 p.val+=(q.val+flag);
			 if(p.val>9){
				 flag=1;
				 p.val-=10;
			 }
			 else{
				 flag=0;
			 }
			 p=p.next;
			 q=q.next;
		 }
		 //�ȳ�
		 if(p==null && q==null){
			 if(flag==1)
				 pre.next=new ListNode(1);
			 return ans;
		 }
		 //q��
		 if(q!=null){
			 pre.next=q;
			 p=q;
		 }
		 //p��
		 if(flag==0)	return ans;
		 while(p!=null){
			 pre=p;
			 p.val+=flag;
			 if(p.val>9){
				 p.val-=10;
				 flag=1;
			 }
			 else{
				 flag=0;
				 break;
			 }
			 p=p.next;
		 }
		 if(p==null && flag==1){
			 pre.next=new ListNode(1); 
		 }
		 return ans;
	 }
	 static public class Point{
		 int x,y;
		 Point(int a,int b){
			 x=a;
			 y=b;
		 }
	 }
	 public static void main(String[] args){
//		 ListNode node1=new ListNode(2);
//		 ListNode node2=new ListNode(4);
//		 ListNode node3=new ListNode(3);
//		 node1.next=node2;
//		 node2.next=node3;
//		 
//		 ListNode node4=new ListNode(5);
//		 ListNode node5=new ListNode(6);
//		 ListNode node6=new ListNode(4);
//		 node4.next=node5;
//		 node5.next=node6;
//		 
//		 AddTwoNumbers atn=new AddTwoNumbers();
//		 ListNode ans=atn.addTwoNumbers(node1, node4);
//		 ListNode p=ans;
//		 while(p!=null){
//			 System.out.println(p.val);
//			 p=p.next;
//		 }
//		 String str="孙sunzu祖汉";
//		 for(int i=0;i<str.length();i++)
//			 if(str.substring(i, i+1).matches("[\\u4e00-\\u9fa5]"))
//				 System.out.println(str.charAt(i));
		 Map<Integer,Point> map=new HashMap<Integer,Point>();
		 map.put(1, new Point(1,1));
		 Point a=map.get(1);
		 a.x+=10;
		 Point b=map.get(1);
		 
		 
	 }
}
